package com.smart.utils;


import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.ObjectUtil;
import com.smart.common.entities.constant.SmartConstant;
import com.smart.common.entities.domain.AclMeta;
import lombok.extern.log4j.Log4j2;

/**
 * @author Xiaxuqiu
 * @date 2022-07-13
 **/

@Log4j2

public class AclUtils {

    /**
     * 从sessionId获取用户真实Id
     *
     * @param sessionId sessionId
     * @param delimiter 分隔符
     * @return {@link Long}
     */
    private static Long getUserIdBySessionId(String sessionId, String delimiter) {
        String[] operators = sessionId.split( delimiter );
        if (operators.length > 0) {
            return Long.valueOf( operators[1] );
        }


        return null;

    }



    /**

     * 生成操作员令牌标识
     *
     * @param loginId 登录id

     * @return {@code String}
     */
    public static String login(  Long loginId) {
        StpUtil.login(loginId);
        return StpUtil.getTokenInfo().getTokenValue();
    }


    /**
     * 得到获得操作员的TokenId
     *
     * @return {@link Long}
     */
    public static Long getLoginId( ) {
        return  StpUtil.getLoginIdAsLong();
    }


    /**
     * 获取当前登录用户的对象信息
     */
    public static AclMeta getAclMeta() {
        try {
            //如果当前账回话获取到了登录信息 在回话信息里面获取数据操作员的姓名资料
            if (StpUtil.isLogin()) {
                return (AclMeta) StpUtil.getTokenSession().get(SmartConstant.MANAGER_SESSION_CODE);
            }
        } catch (Exception e) {
            return null;
        }
        return null;

    }

    /**
     * 获取当前登录人的姓名
     *
     * @return {@code ArmUserAcl}
     */
    public static String getUserName() {
        AclMeta userAcl1 = getAclMeta();
        return ObjectUtil.isNotEmpty( userAcl1 ) ? userAcl1.getName() : "SYSTEM";

    }


    /**
     * 操作员登录注销
     */
    public static void logout() {

        if (StpUtil.isLogin()) {
            StpUtil.getTokenSession().logout();
            StpUtil.logout();
        }
    }

    /**
     * 设置操作员会话基础资料
     *
     * @param sessionEntity 会话实体
     */
    public static void setAclMeta(AclMeta sessionEntity) {

        StpUtil.getTokenSession().set( SmartConstant.MANAGER_SESSION_CODE, sessionEntity );
    }


    /**
     * 当前用户是否登录
     *
     * @return boolean
     */
    public static boolean isLogin() {
        return StpUtil.isLogin();
    }

}
